
class SoftwareController {

    int total = 0;

    //se a url vier sem action redireciona para a create
    def index  = {
        redirect(action: "create");
    };

    //closure que carrega a tela de cadastro
    def create = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos
        def softwareInstance = new Software();
        //busca os softwares cadastrados para o estagiario em questão
        def softwareInstanceList = Software.findAllByEstagiario(session.pessoa);
        //se vier conta a quantidade para a paginação
        if(softwareInstanceList){
            total = softwareInstanceList.count();
        }
        return [softwareInstance: softwareInstance,
                softwareInstanceList: softwareInstanceList,
                softwareInstanceTotal: total];
    }

    //closure que grava o registro
    def save   = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos e recebe os dados
        def softwareInstance = new Software(params);
        //busca os softwares cadastrados para o estagiario em questão
        def softwareInstanceList = Software.findAllByEstagiario(session.pessoa);
        //se vier conta a quantidade para a paginação
        if(softwareInstanceList){
            total = softwareInstanceList.count();
        }
        //grava o registro
        if (softwareInstance.save(flush: true)) {
            flash.message = "Dados cadastrados com sucesso!";
            redirect(action: "create");
        }else {
            render(view:"create",model: [softwareInstance: softwareInstance,
                                         softwareInstanceList: softwareInstanceList,
                                         softwareInstanceTotal: total]);
        }
    };

    //closure que carrega a tela de edição de cadastro
    def edit   = {
        if(!verificaLogon()){
            return;
        }
        //carrega atributos e dados a partir do ID
        def softwareInstance = Software.findById(params.id);
        //busca os softwares cadastrados para o estagiario em questão
        def softwareInstanceList = Software.findAllByEstagiario(session.pessoa);
        //se vier conta a quantidade para a paginação
        if(softwareInstanceList){
            total = softwareInstanceList.count();
        }
        //se retornar dados, envia os mesmos
        if (softwareInstance){
            return [softwareInstance : softwareInstance,
                    softwareInstanceList: softwareInstanceList,
                    softwareInstanceTotal: total];
        }else {
            flash.message="${message(code:'default.not.found.message', args: [message(code: 'software.label', default: 'Software'), params.id])}";
        }
    };

    //closure que grava as alterações do registro
    def update   = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos de formacao e recebe os dados
        def softwareInstance = Software.get(params.id);
        softwareInstance.properties = params;
        //busca os softwares cadastrados para o estagiario em questão
        def softwareInstanceList = Software.findAllByEstagiario(session.pessoa);
        //se vier conta a quantidade para a paginação
        if(softwareInstanceList){
            total = softwareInstanceList.count();
        }
        //grava as alterações
        if(softwareInstance.save()){
            flash.message = "Dados alterados com Sucesso!";
            redirect(action: "create");
        }else {
            render(view:"edit",model: [softwareInstance : softwareInstance,
                                       softwareInstanceList: softwareInstanceList,
                                       softwareInstanceTotal: total]);
        }
    };

    //closure que exclui os registros
    def delete = {
        if(!verificaLogon()){
            return;
        }
        //carrega os atributos do registro a partir do ID
        def softwareInstance = Software.findById(params.id)
        //exclui o registro
        softwareInstance.delete();
        flash.message = "Registro excluido com sucesso.";
        redirect(action: "create");
    };

    /*
     * Método que verifica se o usuário está logado.
     * Se não estiver logado é redirecionado para home
     */
    private boolean verificaLogon() {
        if(!session["pessoa"]){
            flash.message = "Você precisa estar logado para acessar esta página.";
            redirect(controller:'login', action:'auth');
            return false;
        }

        return true;
    }

}

